import CryptoJS from "crypto-js";
import { App } from '../App';

/**socket 数据加密类 */
export default class CryptoAES
{
    /**
     * 加密
     */
    static encrypt(data) {
        if (App.isEncrypt) {
            // 获取期对应的byte数组
            const keyBytes = CryptoJS.enc.Utf8.parse(App.publicKey)

            // data = CryptoJS.enc.Utf8.parse(data)
            let encrypted = CryptoJS.AES.encrypt(data, keyBytes, {
                mode: CryptoJS.mode.ECB,
                padding : CryptoJS.pad.Pkcs7
            })

            return encrypted.toString()
        }
        else{
            return data
        }
    }

    /**
     * 解密
     */
    static decrypt(data) {
        if (App.isEncrypt) {
            // 过滤掉转义符号
            data = data.toString().replace(/\r\n/g,"").replace(/\n/g,""); 

            // 获取期对应的byte数组
            const keyBytes = CryptoJS.enc.Utf8.parse(App.publicKey)
    
            // 解密操作
            const decryptedBytes = CryptoJS.AES.decrypt(data, keyBytes, {
                mode: CryptoJS.mode.ECB,    // 设成与后端一致的加解密模式
                padding: CryptoJS.pad.Pkcs7 // 设置成与后端一致的填充方式
            })
    
            return decryptedBytes.toString(CryptoJS.enc.Utf8)
        }
        else{
            return data
        }
    }
}